package pers.dawnyang.modular.system.service.impl;

import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import pers.dawnyang.common.core.domain.entity.SysConfig;
import pers.dawnyang.common.core.enums.ConfigEnum;
import pers.dawnyang.config.cache.ConfigCacheService;
import pers.dawnyang.modular.system.mapper.SysConfigMapper;
import pers.dawnyang.modular.system.service.ConfigService;

/**
 * @author dawn
 * @date 2021/04/19
 */
@Service
public class ConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig>
    implements ConfigService {

  @Autowired
  private SysConfigMapper sysConfigMapper;

  @Autowired
  private ConfigCacheService configCacheService;

  @Override
  public void initConfigData() {
    List<SysConfig> configs = ConfigEnum.getConfigs();
    LambdaQueryWrapper<SysConfig> lqw1 = new LambdaQueryWrapper<>();
    lqw1.eq(SysConfig::getStatus, 1);
    List<SysConfig> lastConfigs = sysConfigMapper.selectList(lqw1);
    List<SysConfig> lastSame = new ArrayList<>();
    for (SysConfig sc : configs) {
      for (SysConfig lastsc : lastConfigs) {
        if (sc.getConfigName().equals(lastsc.getConfigName())
            && sc.getConfigCode().equals(lastsc.getConfigCode())
            && sc.getRemark().equals(lastsc.getRemark())) {
          lastSame.add(lastsc);
        }
      }
    }
    sysConfigMapper.delete(null);
    for (SysConfig sc : configs) {
      sysConfigMapper.insert(sc);
    }
    for (SysConfig sc : lastSame) {
      LambdaQueryWrapper<SysConfig> lqw2 = new LambdaQueryWrapper<>();
      lqw2.eq(SysConfig::getConfigCode, sc.getConfigCode());
      sysConfigMapper.update(sc, lqw2);
    }

  }

  @Override
  public void initConfigCache() {
    // ConfigUtils.clearConfigCache();
    List<SysConfig> newList = sysConfigMapper.selectList(null);
    for (SysConfig sysConfig : newList) {
      configCacheService.setSysConfigCache(sysConfig.getConfigCode(), sysConfig);
    }

  }

}
